FEXP Solver  1.0.0.0
FEXPMaterial.h
Go to the documentation of this file.
1 // © FEXP, FEXPEnterprise Solver, Ing. Vaclav Rek
3 // Library for solid materials.
4 // Compiler must support C++ ver.14 and later
6 #ifndef _CFEXPMATERIAL_H_
7 #define _CFEXPMATERIAL_H_
8 #include "FEXPCommon.h"
9 #include "FEXPDataContainer.h"
10 
17 
20 {
23 };
24 
31 #define WAVE_SPEED_LAMBDA(statm_lambda) [](t_fexpcommon_ct E, t_fexpcommon_ct rho, t_fexpcommon_ct nu) statm_lambda
32 #define WAVE_SPEED_PAIRMP(key, statm_lambda) { key, WAVE_SPEED_LAMBDA(statm_lambda) }
33 
36 {
37 public:
39 
40  // pure virtual member functions
42  virtual t_fexpcommon_ct GetMatDnsRho() = 0;
43  virtual t_fexpcommon_ct GetMatYngMod() = 0;
44 protected:
45  // wave base speed dynamic characteristics for respective FE type
46  std::map<FEXPFEDefinition::EFEXPFiniteElementGeom, std::function<t_fexpcommon_ct(t_fexpcommon_ct, t_fexpcommon_ct, t_fexpcommon_ct)>> _wave_base_characteristics =
47  {
49  WAVE_SPEED_PAIRMP(FEXPFEDefinition::EFEXPFiniteElementGeom::eFE_2D_in2D, { return sqrt(E / (rho * (1.0 - pow(nu, 2)))); }),
50  WAVE_SPEED_PAIRMP(FEXPFEDefinition::EFEXPFiniteElementGeom::eFE_2D_in3D, { return sqrt(E / (rho * (1.0 - pow(nu, 2)))); }),
51  WAVE_SPEED_PAIRMP(FEXPFEDefinition::EFEXPFiniteElementGeom::eFE_3D , { return sqrt((E * (1.0 - nu)) / (rho * (1.0 + nu) * (1.0 - 2.0 * nu))); })
52  };
53 private:
54  // [no private members ] -----------------------------
55 };
56 
63 
67 {
68 public:
69  ICFEXPMaterialBase(size_t id) : _id(id) { }
70  virtual ~ICFEXPMaterialBase() { }
71 
72  // pure virtual member functions for calculation
74  virtual Ptr<CFEXPMatrix2D> GetStress() = 0;
75  // clone material for layers of layered FE
77  // type of a solid material material
78  virtual EMaterial GetMaterialId() = 0;
79 
80  // override pure virtual member functions
81  virtual size_t GetId () override { return _id; }
82  virtual size_t GetModelId () override { return FEXPCOMMON_DEFAULT_VALUE; }
83  virtual size_t GetType () override { return size_t(ESystemElementType::eMaterial); }
84  virtual size_t GetThreadId () override { return FEXPCOMMON_DEFAULT_VALUE; }
85  virtual size_t GetThreadNumber() override { return FEXPCOMMON_DEFAULT_VALUE; }
86  virtual void SetThreadId (size_t id) override { }
87 protected:
88  // [no protected members] -----------------------------
89 private:
90  size_t _id;
91 };
92 
99 
102  : public ICFEXPMaterialBase
103 {
104 public:
107 
108  // dyn. char.
110  virtual t_fexpcommon_ct GetMatDnsRho() override;
111  virtual t_fexpcommon_ct GetMatYngMod() override;
112  // override compute
113  virtual void CalculateStress(Ptr<CFEXPMatrix2D> strn, Ptr<CFEXPMatrix2D> d_strn, Ptr<CFEXPMatrix2D> strs, t_fexpcommon_ct dt) override;
114  virtual Ptr<CFEXPMatrix2D> GetStress() override;
115  // clone
116  virtual Ptr<ICFEXPMaterialBase> GetSameMaterial() override;
117  // type of a solid material material
118  virtual EMaterial GetMaterialId() override { return ID; }
119 
120  // override pure virtual base functions for NETWORK serialization/deserialization
123 
124  static const EMaterial ID;
125 protected:
126  // [no protected members] -----------------------------
127 private:
128  void initialize();
129  // material characteristics
130  t_fexpcommon_ct _rho;
131  t_fexpcommon_ct _E;
132  t_fexpcommon_ct _nu;
133  // material matrix
134  static const size_t _dim_D;
135  Ptr<CFEXPMatrix2D> _material_D;
136  Ptr<CFEXPMatrix2D> _material_S;
137 };
138 
145 
148  : public ICFEXPMaterialBase
149 {
150 public:
152  virtual ~CFEXPRigidMaterial() { }
153 
154  // dyn. char.
156  virtual t_fexpcommon_ct GetMatDnsRho() override;
157  virtual t_fexpcommon_ct GetMatYngMod() override;
158  // compute
160  virtual Ptr<CFEXPMatrix2D> GetStress() override { return Ptr<CFEXPMatrix2D>(); }
161  virtual Ptr<ICFEXPMaterialBase> GetSameMaterial() override;
162  // type of a solid material
163  virtual EMaterial GetMaterialId() override { return ID; }
164 
165  // override pure virtual base functions for NETWORK serialization/deserialization
168 
169  static const EMaterial ID;
170 protected:
171  // [no protected members] -----------------------------
172 private:
173  // material characteristics
174  t_fexpcommon_ct _rho;
175  t_fexpcommon_ct _E;
176  t_fexpcommon_ct _nu;
177 };
178 
179 #endif // !_CFEXPMATERIAL_H_
virtual void NetDeserialize(Ptr< t_SerializedData > data) override
Definition: FEXPMaterial.h:167
virtual t_fexpcommon_ct GetWaveSpeed(FEXPFEDefinition::EFEXPFiniteElementGeom egtype) override
Definition: FEXPMaterial.cpp:127
virtual void CalculateStress(Ptr< CFEXPMatrix2D > strn, Ptr< CFEXPMatrix2D > d_strn, Ptr< CFEXPMatrix2D > strs, t_fexpcommon_ct dt)=0
virtual size_t GetType() override
Definition: FEXPMaterial.h:83
virtual EMaterial GetMaterialId() override
Definition: FEXPMaterial.h:118
virtual t_fexpcommon_ct GetMatYngMod() override
Definition: FEXPMaterial.cpp:146
Material characteristic for Courant–Friedrichs–Lewy condition of stability.
Definition: FEXPMaterial.h:35
virtual void NetDeserialize(Ptr< t_SerializedData > data) override
Definition: FEXPMaterial.h:122
std::map< FEXPFEDefinition::EFEXPFiniteElementGeom, std::function< t_fexpcommon_ct(t_fexpcommon_ct, t_fexpcommon_ct, t_fexpcommon_ct)> > _wave_base_characteristics
Definition: FEXPMaterial.h:46
Definition: FEXPMaterial.h:21
EMaterial
Type of solid material.
Definition: FEXPMaterial.h:19
virtual t_fexpcommon_ct GetMatYngMod() override
Definition: FEXPMaterial.cpp:218
virtual ~ICFEXPMaterialBase()
Definition: FEXPMaterial.h:70
virtual ~CFEXPRigidMaterial()
Definition: FEXPMaterial.h:152
virtual Ptr< ICFEXPMaterialBase > GetSameMaterial() override
Definition: FEXPMaterial.cpp:178
virtual Ptr< t_SerializedData > NetSerialize() override
Definition: FEXPMaterial.h:166
Definition: FEXPCommon.h:96
CFEXPSimpleElasticMaterial(size_t id, t_fexpcommon_ct rho, t_fexpcommon_ct E, t_fexpcommon_ct nu)
Definition: FEXPMaterial.cpp:18
Simple elastic type of a solid material.
Definition: FEXPMaterial.h:101
Definition: FEXPDataContainer.h:25
virtual ~ICFEXPMaterialDynCharacter()
Definition: FEXPMaterial.h:38
virtual Ptr< t_SerializedData > NetSerialize() override
Definition: FEXPMaterial.h:121
Definition: FEXPCommon.h:276
double t_fexpcommon_ct
Definition: FEXPCommon.h:120
Base interface for solid materials.
Definition: FEXPMaterial.h:65
virtual void CalculateStress(Ptr< CFEXPMatrix2D > strn, Ptr< CFEXPMatrix2D > d_strn, Ptr< CFEXPMatrix2D > strs, t_fexpcommon_ct dt) override
Definition: FEXPMaterial.h:159
static const EMaterial ID
Definition: FEXPMaterial.h:169
Definition: FEXPCommon.h:100
virtual t_fexpcommon_ct GetMatYngMod()=0
virtual EMaterial GetMaterialId() override
Definition: FEXPMaterial.h:163
virtual void CalculateStress(Ptr< CFEXPMatrix2D > strn, Ptr< CFEXPMatrix2D > d_strn, Ptr< CFEXPMatrix2D > strs, t_fexpcommon_ct dt) override
Definition: FEXPMaterial.cpp:153
virtual t_fexpcommon_ct GetWaveSpeed(FEXPFEDefinition::EFEXPFiniteElementGeom egtype)=0
#define FEXPCOMMON_NOT_IMPLEMENTED_EX
Definition: FEXPCommon.h:144
Definition: FEXPCommon.h:98
virtual EMaterial GetMaterialId()=0
virtual Ptr< CFEXPMatrix2D > GetStress() override
Definition: FEXPMaterial.cpp:171
CFEXPRigidMaterial(size_t id, t_fexpcommon_ct rho, t_fexpcommon_ct E, t_fexpcommon_ct nu)
Definition: FEXPMaterial.cpp:194
virtual size_t GetId() override
Definition: FEXPMaterial.h:81
ICFEXPMaterialBase(size_t id)
Definition: FEXPMaterial.h:69
virtual size_t GetThreadNumber() override
Definition: FEXPMaterial.h:85
virtual Ptr< ICFEXPMaterialBase > GetSameMaterial() override
Definition: FEXPMaterial.cpp:225
virtual t_fexpcommon_ct GetMatDnsRho() override
Definition: FEXPMaterial.cpp:139
virtual t_fexpcommon_ct GetWaveSpeed(FEXPFEDefinition::EFEXPFiniteElementGeom egtype) override
Definition: FEXPMaterial.cpp:199
virtual size_t GetThreadId() override
Definition: FEXPMaterial.h:84
static const EMaterial ID
Definition: FEXPMaterial.h:124
virtual Ptr< CFEXPMatrix2D > GetStress() override
Definition: FEXPMaterial.h:160
virtual Ptr< CFEXPMatrix2D > GetStress()=0
EFEXPFiniteElementGeom
Type of FE geometry.
Definition: FEXPCommon.h:90
virtual ~CFEXPSimpleElasticMaterial()
Definition: FEXPMaterial.h:106
virtual t_fexpcommon_ct GetMatDnsRho()=0
Base interface for system element.
Definition: FEXPDataContainer.h:28
#define FEXPCOMMON_DEFAULT_VALUE
Definition: FEXPCommon.h:179
virtual t_fexpcommon_ct GetMatDnsRho() override
Definition: FEXPMaterial.cpp:211
virtual Ptr< ICFEXPMaterialBase > GetSameMaterial()=0
Definition: FEXPMaterial.h:22
#define WAVE_SPEED_PAIRMP(key, statm_lambda)
Definition: FEXPMaterial.h:32
Definition: FEXPCommon.h:94
virtual void SetThreadId(size_t id) override
Definition: FEXPMaterial.h:86
Rigid type of a solid material.
Definition: FEXPMaterial.h:147
virtual size_t GetModelId() override
Definition: FEXPMaterial.h:82